package com.jwong.grpc.helloworld;

import io.grpc.ManagedChannel;
import io.grpc.ManagedChannelBuilder;

public class MyGrpcClient {

    private final GreeterGrpc.GreeterBlockingStub blockingStub;

    public MyGrpcClient(ManagedChannel channel) {
        blockingStub = GreeterGrpc.newBlockingStub(channel);
    }

    public static void main(String[] args) {
        ManagedChannel channel = ManagedChannelBuilder
            /*  使用目标字符串创建通道，该字符串可以是有效的符合 NameResolver 的 URI，也可以是授权字符串。
                符合 NameResolver 的 URI 是由 java.net.URI 定义的绝对分层 URI。示例 URI：
                "dns:///foo.googleapis.com:8080"
                "dns:///foo.googleapis.com"
                "dns:///%5B2001:db8:85a3:8d3:1319:8a2e:370:7348%5D:443"
                "dns://8.8.8.8/foo.googleapis.com:8080"
                "dns://8.8.8.8/foo.googleapis.com"
                "zookeeper://zk.example.com:9900/example_service"

                权限字符串将转换为符合 NameResolver 的 URI，该 URI 具有来自具有最高优先级（例如“dns”）的名称解析器的方案，
                没有权限，并且在正确转义后将原始权限字符串作为其路径。 如果已知模式，我们建议库明确指定模式，
                因为库无法知道在运行时哪个 NameResolver 将是默认的。 示例权限字符串：
               "localhost"
               "127.0.0.1"
               "localhost:8080"
               "foo.googleapis.com:8080"
               "127.0.0.1:8080"
               "[2001:db8:85a3:8d3:1319:8a2e:370:7348]"
               "[2001:db8:85a3:8d3:1319:8a2e:370:7348]:443"
             */
            .forTarget("localhost:9000")
            //.forAddress("localhost", 9000)
            .usePlaintext()
            .build();

        MyGrpcClient client = new MyGrpcClient(channel);
        HelloReply helloReply = client.sayHello("Alex");

        System.out.println(helloReply);

    }

    public HelloReply sayHello(String name) {
        return blockingStub.sayHello(
                HelloRequest.newBuilder()
                        .setName(name)
                        .build());
    }

}
